unit PesquisaMovimentoFinancerioCentroCusto;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, UFormPesquisa, DB, DBTables, StdCtrls, Grids, DBGrids, Buttons,
  ExtCtrls, DBCtrls, Mask, ToolEdit, CheckLst;

type
  TFPesquisaMovimentoFinanceiroCentroCusto = class(TFormPesquisa)
    Label3: TLabel;
    Label9: TLabel;
    Label6: TLabel;
    DEDataIni: TDateEdit;
    DEDataFim: TDateEdit;
    DBLCBConta: TDBLookupComboBox;
    Label1: TLabel;
    DSConta: TDataSource;
    QMovimentoFinanceiro: TQuery;
    QAux: TQuery;
    QAux2: TQuery;
    CkBTodasEmpresas: TCheckBox;
    CLBEmpresas: TCheckListBox;
    Label10: TLabel;
    DBLCBPlano: TDBLookupComboBox;
    SpeedButton1: TSpeedButton;
    DSPlano: TDataSource;
    Label16: TLabel;
    DBLCBCentroCusto: TDBLookupComboBox;
    SpeedButton3: TSpeedButton;
    DSCentro: TDataSource;
    procedure BtnConsultarClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure CkBTodasEmpresasClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure BtnLimparClick(Sender: TObject);
    procedure BtnImprimirClick(Sender: TObject);
    procedure DBLCBContaKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure SpeedButton1Click(Sender: TObject);
    procedure SpeedButton3Click(Sender: TObject);
  private
    { Private declarations }
   Procedure MontaPai;
   Procedure MontaEstrutura;
   procedure MontaDados;
  public
    { Public declarations }
  end;

var
  FPesquisaMovimentoFinanceiroCentroCusto: TFPesquisaMovimentoFinanceiroCentroCusto;
  Pai :Integer;
  s : String;
  Entrada,Saida :Real;
implementation

uses UDmFinanceiro, UGeral, RelatorioMovimentoFinancerioCentroCusto, UFormRelatorio,
  CapturaPlanoContas, CapturaCentroCusto;

{$R *.dfm}

procedure TFPesquisaMovimentoFinanceiroCentroCusto.MontaEstrutura;
begin
 QMovimentoFinanceiro.Close;
 QMovimentoFinanceiro.Open;
 QAux.close;     //      Busca pais;
 QAux.SQL.Clear;
 QAux.SQL.Add('Select Codigo,Estrutura,Descricao,CodPai as Pai,Natureza from PlanoContas ');
 QAux.Open;
 QPesquisa.First;
 while not(QPesquisa.Eof) do
  begin
//   if Not (QMovimentoFinanceiro.Locate('Estrutura',QPesquisa.FieldByName('Estrutura').AsString,[locaseinsensitive])) then
    begin
     QMovimentoFinanceiro.Append;
     QMovimentoFinanceiro.FieldByName('ESTRUTURACentro').AsString:=QPesquisa.fieldByname('EstruturaCentro').AsString;
     QMovimentoFinanceiro.FieldByName('DESCRICAOCentro').AsString:=QPesquisa.fieldByname('DESCRICAOCentro').AsString;
     QMovimentoFinanceiro.FieldByName('ESTRUTURA').AsString:=QPesquisa.fieldByname('Estrutura').AsString;
     QMovimentoFinanceiro.FieldByName('DESCRICAO').AsString:=QPesquisa.fieldByname('DESCRICAO').AsString;
     QMovimentoFinanceiro.FieldByName('Natureza').AsString:=QPesquisa.fieldByname('Natureza').AsString;
     QMovimentoFinanceiro.FieldByName('CONTA').AsString:=QPesquisa.fieldByname('CONTA').AsString;
     QMovimentoFinanceiro.FieldByName('LANCAMENTO').AsInteger:=QPesquisa.fieldByname('LANCAMENTO').AsInteger;
     QMovimentoFinanceiro.FieldByName('DATA').AsDateTime:=QPesquisa.fieldByname('DATA').AsDateTime;
     QMovimentoFinanceiro.FieldByName('DOCUMENTO').AsString:=QPesquisa.fieldByname('DOCUMENTO').AsString;
     QMovimentoFinanceiro.FieldByName('CHEQUE').AsString:=QPesquisa.fieldByname('CHEQUE').AsString;
     QMovimentoFinanceiro.FieldByName('HISTORICO1').AsString:=QPesquisa.fieldByname('HISTORICO1').AsString;
     QMovimentoFinanceiro.FieldByName('HISTORICO2').AsString:=QPesquisa.fieldByname('HISTORICO2').AsString;
     QMovimentoFinanceiro.FieldByName('VALOR').AsFloat:=QPesquisa.fieldByname('VALOR').AsFloat;
     QMovimentoFinanceiro.FieldByName('VALORJUROS').AsFloat:=QPesquisa.fieldByname('JurosMulta').AsFloat;
     QMovimentoFinanceiro.FieldByName('CODIGOREDUZIDO').AsString:=QPesquisa.fieldByname('CodigoReduzido').AsString;
     QMovimentoFinanceiro.FieldByName('CONTACONTABIL').AsString:=QPesquisa.fieldByname('ContaContabil').AsString;
     QMovimentoFinanceiro.Post;
    end;
   QPesquisa.next;
   QMovimentoFinanceiro.close;
   QMovimentoFinanceiro.open;
  end;
end;


procedure TFPesquisaMovimentoFinanceiroCentroCusto.MontaPai;
begin
 QMovimentoFinanceiro.close;
 QMovimentoFinanceiro.open;
 QAux.close;     //      Busca pais;
 QAux.SQL.Clear;
// QAux.SQL.Add('Select Codigo,Estrutura,Descricao,CodPai as Pai,Natureza from PlanoContas ');
 QAux.SQL.Add('Select Codigo,Estrutura,Descricao,CodPai as Pai from CentroCusto ');
 QAux.Open;

 QAux2.Close;
 QAux2.SQL.Clear;
 QAux2.SQL:=QMovimentoFinanceiro.SQL;
 QAux2.Params:=QMovimentoFinanceiro.Params;
 QAux2.open;
 QAux2.First;
 while not( QAux2.eof) do
  begin
   QAux.Locate('Estrutura',QAux2.fieldByname('EstruturaCentro').AsString,[locaseInsensitive]);
   while QAux.fieldByname('Pai').AsInteger <> 0  do
    begin
     if Not (QMovimentoFinanceiro.Locate('EstruturaCentro',QAux.FieldByName('Estrutura').AsString,[locaseinsensitive])) then
      begin
       QMovimentoFinanceiro.Append;
       QMovimentoFinanceiro.FieldByName('ESTRUTURACentro').AsString:=QAux.fieldByname('Estrutura').AsString;
       QMovimentoFinanceiro.FieldByName('DESCRICAOCentro').AsString:=QAux.fieldByname('DESCRICAO').AsString;
//       QMovimentoFinanceiro.FieldByName('Natureza').AsString:=QAux.fieldByname('Natureza').AsString;
       QMovimentoFinanceiro.FieldByName('VALOR').Asfloat:=0.0;
       QMovimentoFinanceiro.Post;
       QMovimentoFinanceiro.close;
       QMovimentoFinanceiro.open;
      end;
     pai:=QAux.fieldByname('Pai').AsInteger;
     QAux.Locate('Codigo',Pai,[locaseInsensitive]);
    end; // While qaux
    QAux2.Next;
  end;
end;


procedure TFPesquisaMovimentoFinanceiroCentroCusto.MontaDados;
Begin
 QMovimentoFinanceiro.close;
 QMovimentoFinanceiro.open;
 QMovimentoFinanceiro.First;
 while Not(QMovimentoFinanceiro.Eof) do
 begin
  QAux2.Close;
  QAux2.SQL.Clear;
  qaux2.SQL.Add(' Select sum(Valor + ValorJuros) as Valor From MovimentoFinanceiroCentroCusto  ');
  qaux2.SQL.Add(' Where (estruturaCentro like :Est) and (Natureza = :Nat)');
  qaux2.ParamByName('Est').AsString :=QMovimentoFinanceiro.fieldByname('EstruturaCentro').AsString + '%';
  QAux2.ParamByName('Nat').AsString:=PlanoContasEntrada;
  qaux2.Open;
  Entrada:=qaux2.fieldByname('Valor').AsFloat;

  QAux2.Close;
  QAux2.SQL.Clear;
  qaux2.SQL.Add(' Select sum(Valor + ValorJuros) as Valor From MovimentoFinanceiroCentroCusto  ');
  qaux2.SQL.Add(' Where (estruturaCentro like :Est) and (Natureza = :Nat)');
  qaux2.ParamByName('Est').AsString :=QMovimentoFinanceiro.fieldByname('EstruturaCentro').AsString + '%';
  QAux2.ParamByName('Nat').AsString:=PlanoContasSaida;
  qaux2.Open;
  Saida:=qaux2.fieldByname('Valor').AsFloat;

  // Se for no pai
  if (QMovimentoFinanceiro.FieldByName('DATA').AsDateTime = 0) or (QMovimentoFinanceiro.FieldByName('Conta').AsString = '' ) then
   begin
    QMovimentoFinanceiro.Edit;
    QMovimentoFinanceiro.FieldByName('Valor').AsFloat:=Abs(Entrada-Saida);
    QMovimentoFinanceiro.Post;
   end;
   QMovimentoFinanceiro.Next;
 end;
End;  
procedure TFPesquisaMovimentoFinanceiroCentroCusto.BtnConsultarClick(Sender: TObject);
begin
 Self.Cursor:=crHourGlass;
 QMovimentoFinanceiro.close;
 QMovimentoFinanceiro.SQL.Clear;
 QMovimentoFinanceiro.SQL.Add('Delete From MovimentoFinanceiroCentroCusto');
 QMovimentoFinanceiro.ExecSQL;

 QMovimentoFinanceiro.Close;
 QMovimentoFinanceiro.SQL.Clear;
 QMovimentoFinanceiro.SQL.Add('Select * From MovimentoFinanceiroCentroCusto');
 QMovimentoFinanceiro.SQL.Add('Order by EstruturaCentro,Conta,Cheque,lancamento,Data,Estrutura ');
 QMovimentoFinanceiro.open;

 if (EmpresasDesmarcadas(CLBEmpresas) = CLBEmpresas.Items.Count) then
  CkBTodasEmpresasClick(Sender);
 S:=Concatenaempresas(CLBEmpresas);
 Self.Cursor:=crHourGlass;

 QPesquisa.Close;
 QPesquisa.SQL.Clear;
 QPesquisa.SQL.Add('Select CentroCusto.estrutura as estruturaCentro,CentroCusto.Descricao as DescricaoCentro,PlanoContas.estrutura as estrutura,PlanoContas.Descricao as Descricao,PlanoContas.natureza as Natureza,Cont_Corr_Descricao as Conta, ');
 QPesquisa.SQL.Add('Lanc_Codigo as lancamento,Lanc_Data as data, Lanc_Documento as Documento,Lanc_Historico1 as Historico1,Lanc_Historico2 as Historico2,lanc_Cheque as Cheque,sum(Lanc_Valor) as Valor,Lanc_PlanoJurosMulta as PlanoJurosMulta,');
 QPesquisa.SQL.Add('Lanc_PlanoDesconto as PlanoDesconto,Lanc_JurosMulta as JurosMulta,PLANOCONTABILIDADE.PLANOCONT_CODIGOREDUZIDO as CodigoReduzido,PLANOCONTABILIDADE.PLANOCONT_DESCRICAO as ContaContabil');
 QPesquisa.SQL.Add('From Lancamento Inner join ContaCorrente on Lanc_Conta =Cont_Corr_Codigo inner join CentroCusto on CentroCusto.Codigo = Lanc_Centrocusto Inner join PlanoContas on PlanoContas.Codigo = Lanc_Plano ');
 QPesquisa.SQL.Add('Left join PLANOCONTABILIDADE on Lancamento.LANC_CONTACONTABIL = PLANOCONTABILIDADE.PLANOCONT_CODIGO ');
 QPesquisa.SQL.Add(' Where (Lancamento.Codigoempresa in ( ' + s + ') )');

 If DBLCBConta.Text <> '' then
  begin
   QPesquisa.SQL.Add(' And (lanc_Conta =:Conta ) ');
   QPesquisa.ParamByName('Conta').AsInteger:=DBLCBConta.KeyValue;
  end;

 if DBLCBPlano.Text <> '' then
  begin
   QPesquisa.SQL.Add(' and (PlanoContas.Estrutura like :Est)');
   QPesquisa.ParamByName('Est').AsString:=DMFinanceiro.QPlano.fieldByname('Estrutura').AsString + '%';
  end;

 if DBLCBCentroCusto.Text <> '' then
  begin
   QPesquisa.SQL.Add(' and (CentroCusto.Estrutura like :EstC)');
   QPesquisa.ParamByName('EstC').AsString:=DMFinanceiro.QCentro.fieldByname('Estrutura').AsString + '%';
  end;

 If (DEDataIni.Date <> 0) and ((DEDataFim.Date <> 0)) then
  begin
   QPesquisa.SQL.Add(' and (Lanc_Data  between :DataI and :DataF ) ');
   QPesquisa.ParamByName('DataI').AsDate:=DEDataIni.Date;
   QPesquisa.ParamByName('DataF').AsDate:=DEDataFim.Date;
  end;

 QPesquisa.SQL.Add('Group By CentroCusto.estrutura,CentroCusto.Descricao,PlanoContas.estrutura ,PlanoContas.Descricao, Cont_Corr_Descricao,PlanoContas.natureza, Lanc_Codigo,Lanc_Data, Lanc_Documento,Lanc_Historico1,Lanc_Historico2,lanc_Cheque,Lanc_PlanoJurosMulta,');
 QPesquisa.SQL.Add('Lanc_PlanoDesconto,Lanc_JurosMulta,PLANOCONTABILIDADE.PLANOCONT_CODIGOREDUZIDO,PLANOCONTABILIDADE.PLANOCONT_DESCRICAO ');
 QPesquisa.Open;
 DSPesquisa.DataSet:=QPesquisa;
 MontaEstrutura;
 MontaPai;
 MontaDados;
 Self.Cursor:=crDefault;
 DSPesquisa.DataSet:=QMovimentoFinanceiro;
 inherited;
end;

procedure TFPesquisaMovimentoFinanceiroCentroCusto.FormCreate(Sender: TObject);
begin
  inherited;
 QPesquisa.Close;
 QPesquisa.SQL.Clear;
 QPesquisa.SQL.Add('Select Emp_Codigo,Emp_Fantasia from empresa');
 QPesquisa.Open;
 QPesquisa.First;
 CLBEmpresas.Items.Clear;
 while not(QPesquisa.Eof) do
 begin
  CLBEmpresas.Items.Add(QPesquisa.fieldByname('Emp_Codigo').AsString + '-' + QPesquisa.fieldByname('Emp_Fantasia').AsString );
  QPesquisa.Next;
 end;
 CkBTodasEmpresasClick(Sender);
 QPesquisa.Close;
end;

procedure TFPesquisaMovimentoFinanceiroCentroCusto.CkBTodasEmpresasClick(
  Sender: TObject);
Var
 i :Integer;
begin
  inherited;
 for i := 0 to CLBEmpresas.Items.Count - 1 do
  begin
   if StrToInt(Copy(CLBEmpresas.Items.Strings[i],1,pos('-',CLBEmpresas.Items.Strings[i])- 1)) = Codigoempresa then
    CLBEmpresas.Checked[i]:=true
   else
    CLBEmpresas.Checked[i]:=CkBTodasEmpresas.Checked;
  end;

end;

procedure TFPesquisaMovimentoFinanceiroCentroCusto.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
 FPesquisaMovimentoFinanceiroCentroCusto:=nil;
  inherited;
end;

procedure TFPesquisaMovimentoFinanceiroCentroCusto.BtnLimparClick(Sender: TObject);
begin
  inherited;
 DBLCBConta.KeyValue:=null;
 DBLCBPlano.KeyValue:=null;
 DBLCBCentroCusto.KeyValue:=null;
 DEDataIni.Date:=0;
 DEDataFim.Date:=0;
end;

procedure TFPesquisaMovimentoFinanceiroCentroCusto.BtnImprimirClick(Sender: TObject);
begin
  inherited;
 Application.CreateForm(TFRelatorioMovimentoFinanceiroCentroCusto,FRelatorioMovimentoFinanceiroCentroCusto);
 with FRelatorioMovimentoFinanceiroCentroCusto do
  begin
   Query1.close;
   Query1.SQL.Clear;
   Query1.SQL:=QMovimentoFinanceiro.SQL;
   Query1.Params:=QMovimentoFinanceiro.Params;
   Query1.Open;
   Query1.Last;
   Query1.First;
   Conta:='';
   QRLNomeRelatorio.Caption:='MOVIMENTO POR CENTRO DE CUSTO';
   QRLData.Caption:=DEDataIni.Text + ' a ' + DEDataFim.Text;
   QuickRep1.DataSet:=Query1;
   QuickRep1.Prepare;
   QuickRep1.Preview;
   close;
  end; // With

end;

procedure TFPesquisaMovimentoFinanceiroCentroCusto.DBLCBContaKeyDown(Sender: TObject;
  var Key: Word; Shift: TShiftState);
begin
  inherited;
 case key of
  116 : begin //F5
          TDBLookupComboBox(Sender).ListSource.DataSet.Close;
          TDBLookupComboBox(Sender).ListSource.DataSet.Open;
        end ;
 end;

 if key = 46 then
  TDBLookupComboBox(Sender).KeyValue:=null;

end;

procedure TFPesquisaMovimentoFinanceiroCentroCusto.SpeedButton1Click(Sender: TObject);
begin
  inherited;
 if FCapturaPlano = nil then
    Application.CreateForm(TFCapturaPlano, FCapturaPlano);
 FCapturaPlano.Tela:='MOVIMENTOFINANCEIROCENTRO';
 FCapturaPlano.Pode:=true;
 FCapturaPlano.show;

end;

procedure TFPesquisaMovimentoFinanceiroCentroCusto.SpeedButton3Click(Sender: TObject);
begin
  inherited;
 if FCapturaCentroCusto = nil then
    Application.CreateForm(TFCapturaCentroCusto, FCapturaCentroCusto);
 FCapturaCentroCusto.Tela:='MOVIMENTOFINANCEIROCENTRO';
 FCapturaCentroCusto.show;

end;

end.
